#ifndef OLTSPINSTANCE_H_
#define OLTSPINSTANCE_H_

#include <list>
#include <iostream>
#include "Request.h"
#include <cmath>
using namespace std;


class OLTSPInstance
{
	vector<vector<float> > distances;
	list<Request> requests;
	string type;
	long total_requests;
	float max_release_time;
	int dimensions;


public:
	OLTSPInstance(char* filename);
	float get_max_release_time();
	int get_tot_requests();
	bool is_empty();
	virtual ~OLTSPInstance();
	virtual void add_intermediate_request(Request& start, Request& end, float distance, float creation_time);
	static list<Request>::iterator get_visible_requests(list<Request>::iterator start, list<Request>::iterator end, float end_time);
	static list<Request>::iterator nearest_request(list<Request>::iterator start, list<Request>::iterator end, Request& actual_position);
	static void print_requests(list<Request>::iterator start, list<Request>::iterator end);
	static void print_requests_visited(list<Request>::iterator start, list<Request>::iterator end);
	static void print_requests_address(list<Request>::iterator start, list<Request>::iterator end);
	static float calculate_path_distance(list<Request>::iterator begin, list<Request>::iterator end, bool homing);
};




#endif /*OLTSPINSTANCE_H_*/
